查看原文
其他

R包tidyLPA的潜剖面分析(LPA)

生信小白鱼 鲤小白 小白鱼的生统笔记 2022-05-08
R包tidyLPA的潜剖面分析(LPA)
潜类别分析(Latent Class Analysis,LCA)和潜剖面分析(Latent Profile Analysis,LPA)是旨在从观测数据中鉴别隐藏组的技术。它们与聚类相似,但更灵活,因为它们基于数据的显式模式,并提供了对隐藏组确定程度的解释。如果期望将大量变量减少为几个子组,则LCA和LPA很有用。LCA和LPA均假设数据中存在未观察到的潜在特征,这些潜在特征代表了对指示项的响应模式,二者区别在于LCA用于分类变量,LPA则用于连续变量。
LPA试图根据一系列连续变量的潜在特征(或称潜在类、潜剖面)识别对象响应模式。LPA将连续变量的方差分解为剖面内和剖面间方差,估计变量的不同特征,并通过潜在类解释观测变量间的复杂关系以及实现对象聚类。
本篇简介R包tidyLPA的LPA方法。

 

tidyLPA的LPA


tidyLPA包的开发目的在于使R实现LPA变得更容易,它为广泛使用的mclust、MplusAutomation等包(这些是LPA的主流包)提供了一个框架,用于高斯混合建模。因此,tidyLPA并不包含直接执行LPA的代码,而是封装了mclust、MplusAutomation等包中的LPA相关函数,使它们的调用更方便。

tidyLPA的主要贡献是:

(1)提供指定LPA通用模型的功能;

(2)通过更“整洁”的操作,使输出结果在后续分析中更容易使用:输入和输出均为data.frame,便于读写、分析及绘图;使用管道操作符“%>%”组合函数,类似于linux的管道操作,使函数书写和前后过程更优雅;使用起来较为傻瓜式,可一步获得多种统计值。


tidyLPA的LPA执行式


然后展示一个示例。

tidyLPA的内置数据集“pisaUSA15”,记录了2015PISA项目针对美国学生的某项调查数据,包含四项评估内容(变量):

broad_interest:学生兴趣的综合测量;

Enjoyment:学生娱乐的综合测量;

instrumental_mot:学生工具性动机的综合测量;

self_efficacy:学生自我效能的综合测量。

library(tidyLPA)

#数据集,详情 ?pisaUSA15
data(pisaUSA15)
head(pisaUSA15)

 

然后期望根据这些指示值,寻找潜在特征解释指示值之间的潜在结构,并通过LPA对学生个体进行分层,以及探究变量对学生分层的贡献。

library(dplyr)

##LPA 分析,详情 ?estimate_profiles
#选择了部分数据演示,一是作为示例减少运行时间,二是展示这种管道符操作示例方法
#这里选择了前 100 行的观测对象,以及 3 种观测变量执行 LPA;划分 3 个潜在特征(类,class),并使用模型 1
#本示例未执行变量标准化
m3 <- pisaUSA15[1:100, ] %>%
select(broad_interest, enjoyment, self_efficacy) %>%
single_imputation() %>%
#scale() %>%
estimate_profiles(n_profiles = 3, variances = 'equal', covariances = 'zero', package = 'mclust')

##若不习惯使用管道符,以上就是这样的结构
#选择演示用的数据子集
pisaUSA15_select <- pisaUSA15[1:100,c('broad_interest', 'enjoyment', 'self_efficacy')]

#填补数据中的缺失值
pisaUSA15_select <- single_imputation(pisaUSA15_select)

#数据标准化,视实际情况而定;标准化方法可使用 scale()、poms() 等
#pisaUSA15_select <- scale(pisaUSA15_select)

#LPA 分析
m3 <- estimate_profiles(df = pisaUSA15_select, n_profiles = 3, variances = 'equal', covariances = 'zero', package = 'mclust')

由于tidyLPA主要作为其它R包的接口,因此在使用时需指定特定R包名称(事先确保这些已经安装),以调用它们的LPA方法使用。如这里调用mclust包的方法执行LPA。

n_profiles参数用于指定潜在特征的数量,以便确定最终识别多少潜在特征以解释变量间的关系,进而将对象聚为多少类。

tidyLPA目前提供了6种模型方法,对应于常见的不同需求,使用时根据是否以及如何估计变量方差和协方差来指定模型。可通过models参数指定,或者修改variances、covariances参数项指定。

通常,潜在特征数量的指定以及模型的选择需要基于多种来源的证据来确定,包括信息标准、统计检验、可解释性和简约性等。

以下为tidyLPA的6种模型方法:

(1)将方差限制为在各个类之间相等,并且协方差固定为0(变量的条件独立性),即等方差和零协方差的情形(models=1,或variance='equal',covariances='zero');

(2)不等方差和零协方差的情形(models=2,或variance='varying',covariances='zero');

(3)等方差和等协方差的情形(models=3,或variance='equal',covariances='equal');

(4)不等方差和等协方差的情形(models=4,或variance='varying',covariances='equal',无法通过mclust拟合,需使用MplusAutomation);

(5)等方差和不等协方差的情形(models=5,或variance='equal',covariances='varying',无法通过mclust拟合,需使用MplusAutomation);

(6)不等方差和不等协方差的情形(models=4,或variance='varying',covariances='varying')。

关于这些模型的简介,以及和其来源R包mclust、MplusAutomation的关系,可参考:

https://data-edu.github.io/tidyLPA/articles/Introduction_to_tidyLPA.html

 

就获得的LPA结果而言,每次结果会有微小的差别。


 

LPA潜剖面的参数估计


如上示例指定划分了3个潜在类(class,即潜在特征、潜剖面),可使用get_estimates()获取3个潜在class的均值方差估计、显著性p值等参数估计值。

结果反映了潜在class对于解释所观测的变量结构是否是有意义的。

#获取参数估计
m3_est <- get_estimates(m3)
m3_est

   

LPA的拟合优度评估


对于拟合优度的评估,tidyLPA可一次生成很多用于反映LPA拟合优度的统计指标。

#查看拟合统计量
m3_fit <- get_fit(m3)
m3_fit


例如:LogLik,给定模型的数据的对数似然值;AIC,Aikake信息准则;BIC,贝叶斯信息准则;BLRT,自举似然检验;等等指示值描述可参考该链接文末:

https://data-edu.github.io/tidyLPA/articles/Introduction_to_tidyLPA.html

 

例如,AIC、BIC的值越小代表了拟合度越高,即模型越可靠。存在多个备选模型时,可通过比较它们的AIC、BIC值,尽可能选择较低AIC、BIC值(精度原则)且潜在class更少(简约性原则)的模型。

当然,选择时也要综合考虑结果对于解释数据是否有意义的问题。


LPA的后验概率


潜类别分析(LCA),LPA在获得理想的潜在class及其参数估计值后,继续计算变量反应每种组合分类到各潜在class的后验概率,然后根据后验概率的大小决定该组合应归入的潜在class。即通过观测变量和潜在class的关系,将观测对象划分归类。

#对象响应估计剖面的后验概率
m3_class <- get_data(m3)
m3_class

#绘制剖面图展示对象聚类
plot_profiles(m3)


表格结果中,每一行为一观测对象,排列顺序和输入数据集中的顺序相同;各列的信息分别表示选择的模型(本示例选择使用了模型1)、划分的class数量(本示例指定了划分3个潜在class)、数据集中的变量观测值、各对象响应潜在class的后验概率即其最终被划分的class(选择后验概率最高的那个)。

图片横轴为变量,纵轴为变量的值;各点代表观测对象,颜色表示了对象划分的潜在class。

如果做LPA的目的还包含实现对个体的聚类,则该过程是很有帮助的。


各类模型的比较执行及评估


此外,tidyLPA允许我们一次执行多种模型,或者设置不同的潜在class数量。在获得多种结果后,可综合比较它们以选择最合适的运行模式。

##多模型比较运行,管道符操作示例
#例如分别设置 1、2、3 个潜在特征,并选择两种模型运行
#最后通过 AIC、BIC 等值,评估拟合优度,并选择最适方法
pisaUSA15[1:100, ] %>%
select(broad_interest, enjoyment, self_efficacy) %>%
single_imputation() %>%
estimate_profiles(n_profiles = 1:3, variances = c('equal', 'varying'), covariances = c('zero', 'varying')) %>%
compare_solutions(statistics = c('AIC', 'BIC'))


当然这仅为机器自动评估的结果,实际分析中仅可作为参考使用,因为我们分析数据的最终目的是解释一定的自然/社会现象的,机器自动选择的“最佳模式”可能不具任何实际意义。



链接

R包poLCA的潜类别分析(LCA)

R包lavaan的结构方程建模-潜变量结构模型

R包piecewiseSEM的分段结构方程建模

R包lavaan的结构方程建模-路径分析

结构方程模型(SEM)和分段结构方程模型简介

R包lavaan的验证性因子分析(CFA)

探索性因子分析(EFA)及其在R中实现

多元因子分析(MFA)及其在R中实现

R包ade4的RLQ分析和第四角分析

R包vegan的基于距离的冗余分析(db-RDA)

R包vegan的非度量多维标度(NMDS)分析

处理同时含有定量和分类变量的数据集的PCA方法



您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存